package seatiger.tomcat.catalina;

import javax.servlet.ServletException;
import java.io.IOException;

/**
 * 管道
 */
public interface Pipeline {
    /**
     * 基础阀，保证最后执行基础阀中的信息
     * @return
     */
    Valve getBasic();

    /**
     * 设置基础阀
     * @param valve
     */
    void setBasic(Valve valve);

    /**
     * 基础阀
     * @param valve
     */
    void addValve(Valve valve);

    /**
     * 移除阀
     * @param valve
     */
    void removeValve(Valve valve);

    /**
     * 获取阀
     * @return
     */
    Valve[] getValves();

    /**
     * 管道开始执行，由ValueContext 中触发每个阀的调用
     * @param request
     * @param response
     * @throws IOException
     * @throws ServletException
     */
    @Deprecated
    void invoke(Request request,Response response) throws IOException, ServletException;

    /**
     * 第一个执行的阀
     * @return
     */
    Valve getFirst();

}
